#ifndef MOD_SNOW_H
#define MOD_SNOW_H
//#include "stdafx.h"

using namespace std;

class Mod_Snow :public Mod_out_handling
{
    protected:
    
   
   
  
    
    public:
    virtual int compute (time_intervall &ti);    
    Mod_Snow(Mod_in *iinp);
    ~Mod_Snow();
};

class Mod_Snow_simple :public Mod_Snow
{
public:
    map <string,int> IO_options;
    Inp_weather *inp_weather;
    Compute_Snow_melt *snow_melt;
    Mod_ETP *mod_etp;
    Compute_Snow_growth *snow_growth;
    
    
    Mod_Snow_simple (map <string,int> &iIO_options,
                         Mod_in *iinp,
                         Inp_weather *iweather,
                         Compute_Snow_melt *isnow_melt,
                         Mod_ETP *imod_etp,
                         Compute_Snow_growth *isnow_growth
                ); 
    ~Mod_Snow_simple();
    int compute(time_intervall &ti);
};




class Compute_Snow_growth{
protected:
public:
double compute(const Inp_weather *weather, 
		const time_intervall &ti) const;
};
    

class Compute_Snow_melt
{
protected:
public:
Compute_Snow_melt();
~Compute_Snow_melt();
virtual double compute(const Mod_in *iinp,const Inp_weather *weather,const time_intervall &ti)=0;
};

class Compute_Snow_melt_Tagesgradverfahren :public Compute_Snow_melt
{
protected:
public:
Compute_Snow_melt_Tagesgradverfahren ();
~Compute_Snow_melt_Tagesgradverfahren ();
double compute(const Mod_in *iinp,const Inp_weather *weather,const time_intervall &ti);
};




  

#endif